Red Hat System Administration II 8.2

Управление планированием процессов

Задачи

После завершения этого раздела вы сможете задавать приоритеты запуска процессов с помощью команд nice и renice.

Многозадачность и планирование процессов в Linux

Современные компьютерные системы варьируются от простых систем, состоящих из одного процессора и выполняющих только одну инструкцию за раз, до высокопроизводительных суперкомпьютеров с сотнями процессоров, имеющих десятки или даже сотни ядер, которые способны выполнять множество инструкций одновременно. Однако все эти системы имеют одну общую черту: количество выполняемых процессов превышает количество процессоров.

Linux и другие операционные системы выполняют больше процессов, чем доступно процессоров, благодаря технологии, известной как квантование времени или многозадачность. Планировщик процессов операционной системы быстро переключается между процессами, работающими на одном ядре, создавая иллюзию параллельной работы нескольких процессов.

Относительные приоритеты

Разные процессы имеют разные уровни значимости. Планировщик процессов можно настроить на использование разных политик планирования для разных процессов. Политика планирования, используемая для большинства процессов в обычной системе, называется SCHED_OTHER (или SCHED_NORMAL), однако существуют и другие политики для различных рабочих нагрузок.

Поскольку процессы имеют разную значимость, процессы, работающие с политикой SCHED_NORMAL, могут получить относительный приоритет. Такой приоритет называется фактором уступчивости процесса. Всего доступно 40 факторов уступчивости.

Диапазон факторов уступчивости ― от -20 (наивысший приоритет) до 19 (наименьший приоритет). По умолчанию процессы наследуют фактор уступчивости от родительского процесса, и обычно он равен 0. Более высокий фактор уступчивости указывает на меньший приоритет процесса (процесс легко отдает свою долю ресурсов ЦП). Более низкий фактор уступчивости указывает на более высокий приоритет процесса (процесс, скорее всего, не будет отдавать свои ресурсы ЦП). При отсутствии конкуренции за ресурсы (например, когда активных процессов меньше, чем доступных ядер ЦП) даже процессы с высоким фактором уступчивости будут использовать все доступные ресурсы ЦП. Однако, когда процессов, использующих время ЦП, больше, чем доступных ядер, процессы с более высоким фактором уступчивости будут получать меньше времени ЦП, чем процессы с более низким фактором.

Настройка факторов уступчивости и разрешений

Поскольку назначение низкого фактора уступчивости для процесса, которому нужно много ресурсов ЦП, может отрицательно сказаться на производительности других процессов в системе, только пользователь root может понижать фактор уступчивости.

Непривилегированным пользователям разрешено только повышать фактор уступчивости своих процессов. Понизить фактор уступчивости своих процессов или изменить фактор уступчивости процессов других пользователей они не могут.

Отображение фактора уступчивости процессов

Существуют несколько утилит, отображающих фактор уступчивости запущенных процессов. Утилиты управления процессами (например, top) по умолчанию отображают фактор уступчивости. Другие утилиты (например, команда ps) показывают фактор уступчивости при использовании соответствующих опций.

Отображение фактора уступчивости с помощью команды top

Команда top позволяет просматривать процессы и управлять ими в интерактивном режиме. В конфигурации по умолчанию отображаются два столбца со значениями фактора уступчивости и приоритета. В столбце NI показан фактор уступчивости процесса, а в столбце PR — его запланированный приоритет. В интерфейсе top фактор уступчивости сопоставляется с внутренней очередью приоритетов системы, как показано на следующем рисунке. Например, фактор уступчивости -20 соответствует значению 0 в столбце PR. Фактор уступчивости 19 соответствует приоритету 39 в столбце PR.

Рисунок 3.5: Значения фактора уступчивости согласно top

Отображение значений фактора уступчивости через командную строку

Команда ps отображает значения фактора уступчивости процессов, но только с использованием соответствующих опций форматирования.

Следующая команда ps отображает список всех процессов (с указанием идентификатора, имени, фактора уступчивости и класса планирования), отсортированный в порядке убывания фактора уступчивости. Процессы, для которых в столбце класса планирования (CLS) отображается TS, выполняются в соответствии с политикой планирования SCHED_NORMAL. Процессы с дефисом (-) вместо значения фактора уступчивости работают в соответствии с другими политиками планирования, и планировщик интерпретирует их как процессы с более высоким приоритетом. Подробное рассмотрение дополнительных политик планирования не входит в этот курс.

[user@host ~]$ ps axo pid,comm,nice,cls --sort=-nice
  PID COMMAND          NI CLS
   30 khugepaged       19  TS
   29 ksmd              5  TS
    1 systemd           0  TS
    2 kthreadd          0  TS
    9 ksoftirqd/0       0  TS
   10 rcu_sched         0  TS
   11 migration/0       -  FF
   12 watchdog/0        -  FF
...output omitted...

Запуск процессов с разными факторами уступчивости

Создаваемый процесс наследует фактор уступчивости родительского процесса. При запуске процесса из командной строки он наследует фактор уступчивости процесса оболочки, из которого был запущен. В результате новые процессы, как правило, работают с фактором уступчивости, равным 0.

В следующем примере из командной оболочки запускается процесс и отображается его фактор уступчивости. Обратите внимание на использование опции PID в команде ps для указания запрошенного вывода.

[user@host ~]$ sha1sum /dev/zero &
[1] 3480
[user@host ~]$ ps -o pid,comm,nice 3480
  PID COMMAND          NI
 3480 sha1sum           0

Любой пользователь может использовать команду nice для выполнения команд с фактором уступчивости по умолчанию или более высоким. Команда nice без опций запускает процесс с фактором уступчивости по умолчанию, равным 10.

В следующем примере команда sha1sum выполняется как фоновое задание с фактором уступчивости по умолчанию и отображается фактор уступчивости процесса.

[user@host ~]$ nice sha1sum /dev/zero &
[1] 3517
[user@host ~]$ ps -o pid,comm,nice 3517
  PID COMMAND          NI
 3517 sha1sum          10

Используйте опцию -n, чтобы применить свой фактор уступчивости к запускаемому процессу. По умолчанию к текущему фактору уступчивости процесса добавляется 10. В следующем примере команда выполняется как фоновое задание с фактором уступчивости, заданным пользователем, и отображается фактор уступчивости процесса.

[user@host ~]$ nice -n 15 sha1sum &
[1] 3521
[user@host ~]$ ps -o pid,comm,nice 3521
  PID COMMAND          NI
 3521 sha1sum          15

Важно

Непривилегированный пользователь может только повысить фактор уступчивости с текущего значения до максимального (19). Повысив значение, непривилегированный пользователь уже не сможет уменьшить его обратно. Пользователь root может понизить фактор уступчивости с любого текущего значения до минимального значения (-20).

Изменение фактора уступчивости существующего процесса

Фактор уступчивости существующего процесса можно изменить с помощью команды renice. В этом примере используется идентификатор процесса (PID) из предыдущего примера для изменения текущего фактора уступчивости 15 на 19.

[user@host ~]$ renice -n 19 3521
3521 (process ID) old priority 15, new priority 19

Изменить фактор уступчивости процесса также можно с помощью команды top. В интерактивном интерфейсе top укажите опцию r для доступа к команде renice, а после нее PID соответствующего процесса и новый фактор уступчивости.

Ссылки

Man-страницы nice(1), renice(1), top(1) и sched_setscheduler(2).